<?php

class Indicadores_Model_Indicadores extends Model_Cna {
	
	/**
	 * Devuelve un arreglo del listado de Indicadores
	 * @return array
	 */
	public function getIndicadores($datos=array()) {
		$IndicadoresTable = new Indicadores_Model_DbTable_Indicadores();
		return $IndicadoresTable->getIndicadores($datos);
	}
	
	/**
	 * Almacena los datos de un indicador en la base de datos
	 * @param array $datos Los datos del indicador
	 */
	public function guardarIndicador($datos) {
		$IndicadoresTable = new Indicadores_Model_DbTable_Indicadores();
		
		if(isset($datos["codindicador"]) && !empty($datos["codindicador"])) {
			$row = $IndicadoresTable->find($datos["codindicador"])->current();
			$row->setFromArray($datos)->save();
		} else {
			unset($datos["codindicador"]);
			return $IndicadoresTable->createRow($datos)->save();
		}
		
	}
	
	/**
	 * Carga los datos de un indicador
	 * @param int $codindicador
	 * @return Array con los datos de un indicador
	 */
	public function getIndicador($codindicador){
		$IndicadoresTable = new Indicadores_Model_DbTable_Indicadores();
		return $IndicadoresTable->find($codindicador)->current()->toArray();
	}
	
	/**
	 * Eliminar indicador
	 * @param $codindicador
	 * @return int El número de filas eliminadas
	 */
	public function eliminarIndicador($codindicador){
		$IndicadoresTable = new Indicadores_Model_DbTable_Indicadores();
		return $IndicadoresTable->find($codindicador)->current()->delete();
	}
	
	/**
	 * Devuelve un arreglo del listado historico de un indicador
	 * @return array
	 */
	public function getHistoricoIndicador($datos=array()) {
		$IndicadorTable = new Indicadores_Model_DbTable_Historicoindicador();
		return $IndicadorTable->getHistoricoIndicador();
	}
	
	/**
	 * Almacena los datos históricos de un indicador en la base de datos
	 * @param array $datos Los datos del indicador
	 */
	public function guardarHistoricoIndicador($datos) {
		$IndicadorTable = new Indicadores_Model_DbTable_Historicoindicador();
		
		if(isset($datos["codhistorico"]) && !empty($datos["codhistorico"])) {
			$row = $IndicadorTable->find($datos["codhistorico"])->current();
			$row->setFromArray($datos)->save();
		} else {
			unset($datos["codhistorico"]);
			return $IndicadorTable->createRow($datos)->save();
		}
		
	}
	
	/**
	 * Esta funcion recibe un vector compuesto por variables e indicadores, el objetivo es dividir en dos vectores independientes
	 * la expresion que llega, en dos vectores, uno de variables y otro de indicadores
	 * @param varchar $expresion Los datos del indicador
	 */
//Componente: 10 - Gestion de Indicadores
//Requisito:  38 - Listar indicadores
//
public function obtener_variables_indicadores($expresion){
	$vector = array("indicadores"=>array(),"variables"=>array());
	$i=0;
	$anexar=false;
	$temp="";
	while ($i<strlen($expresion)) {
		if (!strcmp($expresion[$i],"]")){
			if (!in_array($temp,$vector[$tipo])) {
				$vector[$tipo][] = $temp;
			}
			$temp="";
			$anexar=false;
		}
		if ($anexar) {
			$temp.=$expresion[$i];
		}
		if (!strcmp($expresion[$i],"[")) {
			$anexar=true;
			if (strcmp($expresion[$i+1],"@")) {
				$tipo = "variables";
			}else{
				$tipo = "indicadores";
				$i+=1;
			}
		}
		$i+=1;
	}
	return $vector;
}
	
}
